home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 80 / XENIATGM80.iso / Goodies / Blood 2 / Source / data.z / BloodServerShell.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-04-02  |  4.3 KB  |  148 lines

  1. // ----------------------------------------------------------------------- //
  2. //
  3. // MODULE  : BloodServerShell.cpp
  4. //
  5. // PURPOSE : Blood's Server Shell - Definition
  6. //
  7. // CREATED : 9/18/97
  8. //
  9. // ----------------------------------------------------------------------- //
  10.  
  11. #ifndef __BLOODSERVERSHELL_H__
  12. #define __BLOODSERVERSHELL_H__
  13.  
  14. #include "cpp_server_de.h"
  15. #include "cpp_engineobjects_de.h"
  16. #include "cpp_servershell_de.h"
  17. #include "PathMgr.h"
  18. #include "NetDefs.h"
  19. #include "SharedDefs.h"
  20. #include "VoiceMgr.h"
  21. #include "TeamMgr.h"
  22.  
  23. #define MAX_CLIENTS        MAX_MULTI_PLAYERS
  24.  
  25. class CPlayerObj;
  26.  
  27.  
  28. class CBloodServerShell : public CServerShellDE
  29. {
  30.     public :
  31.  
  32.         CBloodServerShell();
  33.         ~CBloodServerShell();
  34.         
  35.         void        FragStatus();
  36.         GameType    GetGameType()    const { return (GameType)m_GameInfo.m_byType; }
  37.         const NetGame *    GetNetGameInfo()    const { return &m_GameInfo; }
  38.         DBOOL        IsMultiplayerGame() { return (m_GameInfo.m_byType != GAMETYPE_SINGLE); }
  39.         DBOOL        IsMultiplayerTeamBasedGame();
  40.         DBOOL        IsMultiplayerTeams() { return(m_GameInfo.m_byType == NGT_TEAMS); }
  41.         DBOOL        IsMultiplayerCtf() { return(m_GameInfo.m_byType == NGT_CAPTUREFLAG); }
  42.         DBOOL        IsMultiplayerSoccer() { return(m_GameInfo.m_byType == NGT_SOCCER); }
  43.         
  44.         PathMgr*    GetPathMgr() { return &m_PathMgr; }
  45.         CVoiceMgr*    GetVoiceMgr() { return &m_VoiceMgr; }
  46.         CTeamMgr*    GetTeamMgr() { return(&m_TeamMgr); }
  47.         void        SetStartPointName(HSTRING hstrStartPt);
  48.         HSTRING        GetStartPointName() { return m_hstrStartPointName; }
  49.         void        SendBlood2ServConsoleMessage(char* sMsg);
  50.         void        SetUpdateBlood2Serv() { m_bUpdateBlood2Serv = DTRUE; }
  51.         HCLIENT        FindClient(HOBJECT hObject);
  52.  
  53. #ifdef _ADD_ON
  54.         DBOOL        IsAddon() { return m_bAddonLevel; };
  55. #endif
  56.  
  57.     protected :
  58.  
  59.         BaseClass*    OnClientEnterWorld(HCLIENT hClient, void* pClientData, DDWORD dwClientDataLen);
  60.         void        OnClientExitWorld(HCLIENT hClient);
  61.         void        OnMessage(HCLIENT hSender, DBYTE messageID, HMESSAGEREAD hMessage);
  62.         void        OnCommandOn(HCLIENT hClient, int command);
  63.         void        PreStartWorld(DBOOL bSwitchingWorlds);
  64.         void        PostStartWorld();
  65.         void        Update(DFLOAT timeElapsed);
  66.         void        UpdateClientPingTimes();
  67.         void        OnRemoveClient(HCLIENT hClient);
  68.  
  69.         DBOOL        LoadWorld(HMESSAGEREAD hMessage);
  70.         DBOOL        SaveGame(DBYTE bySaveType, DBOOL bSavePlayers, DBOOL bSaveConsole);
  71.         DBOOL        RestoreGame(DBYTE bySaveType);
  72. //        DBOOL        BuildSavePath(char *pBuffer, char *pFilename);
  73.         DBOOL        KeepAliveSave();
  74.         DBOOL        KeepAliveLoad();
  75.  
  76.         void        CacheFiles();
  77.  
  78.         void        DoLevelChangeCharacterCheck(char* sLevel);
  79.  
  80.     private:
  81.  
  82.         int            m_NumPlayers;
  83.         BaseClass*    CreatePlayer(HCLIENT hClient);
  84.         void        RespawnPlayer(BaseClass* pBaseClass, HCLIENT hClient);
  85.         void        ConsoleMessage(HCLIENT hClient, char *msg);
  86.         void        AddPlayerMessage(HCLIENT hDestClient, HCLIENT hNewPlayerClient);
  87.         void        AddPlayersMessage(HCLIENT hClient);
  88.         void        RemovePlayerMessage(HCLIENT hClient);
  89.         void        SetGameInfo(DBYTE nGameFlags, DBYTE nDifficulty);
  90.         void        SetupGameInfo();
  91.  
  92.         DBOOL        UpdateSessionName();
  93.         DBOOL        UpdateBlood2Server();
  94.         void        UpdateMultiplayer();
  95.         void        StartNextMultiplayerLevel();
  96.         void        StartNextMultiplayerLevelAck();
  97.         DRESULT        ServerAppMessageFn(char* sMsg);
  98.  
  99.  
  100.         void        ClearClientList() { for (int i = 0; i < MAX_CLIENTS; i++) { m_aClients[i] = DNULL; } }
  101.         DBOOL        AddClientToList(HCLIENT hClient);
  102.         DBOOL        RemoveClientFromList(HCLIENT hClient);
  103.         DBOOL        IsClientInList(HCLIENT hClient);
  104.         CPlayerObj*    GetPlayerFromClientList(HCLIENT hClient);
  105.  
  106.         CVoiceMgr    m_VoiceMgr;
  107.         CTeamMgr    m_TeamMgr;
  108.         PathMgr        m_PathMgr;
  109.         HSTRING        m_hstrStartPointName;
  110.         DBOOL        m_bKeepAlive;
  111. #ifdef _ADD_ON
  112.         DBOOL        m_bAddonLevel;
  113. #endif
  114.  
  115.         HCLIENT        m_aClients[MAX_CLIENTS];    
  116.  
  117.         NetGame        m_GameInfo;
  118.         DBOOL        m_bBlood2ServHosted;
  119.         DBOOL        m_bUpdateBlood2Serv;
  120.         int            m_nCurLevel;
  121. };
  122.  
  123.  
  124. // Externs...
  125.  
  126. extern CBloodServerShell* g_pBloodServerShell;
  127. extern char g_szVarRevisiting[];
  128. extern char g_szVarDifficulty[];
  129. extern char g_szVarGameType[];
  130.  
  131.  
  132. // Inlines...
  133.  
  134. inline DBOOL CBloodServerShell::IsMultiplayerTeamBasedGame()
  135. {
  136.     if (m_GameInfo.m_byType == NGT_CAPTUREFLAG) return(DTRUE);
  137.     if (m_GameInfo.m_byType == NGT_TEAMS) return(DTRUE);
  138.     if (m_GameInfo.m_byType == NGT_SOCCER) return(DTRUE);
  139.  
  140.     return(DFALSE);
  141. }
  142.  
  143.  
  144. // EOF...
  145.  
  146. #endif  // __BLOODSERVERSHELL_H__
  147.  
  148.